package com.probiz.estore.common.service;

import java.io.Serializable;
import java.math.BigDecimal;

import javax.servlet.http.HttpServletRequest;

import com.probiz.estore.common.model.order.SalesOrder;
import com.probiz.estore.common.model.system.PaymentGateway;
import com.probiz.estore.order.model.OnlinePaymentResponse;

public interface OrderService {
	
	
	/**
     * 根据订单号获取订单，并且判断该订单是否属于该客户的
     * @param orderNo
     * @return
     */
    public SalesOrder getSalesOrderByOrderNo4Safety(String orderNo,Integer customerId);
    
	
	/**
	 * 获得商品在订单的被调用情况
	 * @param productId
	 * @return
	 *        <strong>0</strong> 仅存在于结束状态的订单<br/>
	 *        <strong>1</strong> 存在于正在非结束状态的订单<br/>
	 *        <strong>2</strong> 不存在任何订单
	 */
	public short getProductCircsInSalesOrder(Integer productId);
	
	/**
	 * 获得商品在订单的被调用情况
	 * @param productSkuId
	 * @return
	 *        <strong>0</strong> 仅存在于结束状态的订单<br/>
	 *        <strong>1</strong> 存在于正在非结束状态的订单<br/>
	 *        <strong>2</strong> 不存在任何订单
	 */
	public short getProductSkuCircsInSalesOrder(Integer productSkuId);
	
	/**
	 * 返回指定会员的订单数是否为零
	 * 
	 * @param userId
	 * @return true - 为零
	 * 		   false - 不为零
	 */
	public boolean isCustomerOrderNumZero(Integer customerId);
	
	
	/**
	 * 前台 支付回调接口，在线支付成功时调用
	 */
	public void doHandleOnlinePaymentResponse(OnlinePaymentResponse response,HttpServletRequest request);

	/**
	 * 前台 支付回调接口，在线支付成功时调用
	 * @param orderNo 订单编号
	 * @param paymentAmount 支付金额
	 * @param paymentGateway 支付网关
	 * @param payer 付款人
	 * @param ipAddress 用户的IP地址，注意这个字段最长64位
	 */
	public void doPayOrder4Online(String orderNo, BigDecimal paymentAmount, PaymentGateway paymentGateway, String payer, String ipAddress);
	
	/**
	 * 获得礼品在订单的被调用情况
	 * @param productId
	 * @return
	 *        <strong>0</strong> 仅存在于结束状态的订单<br/>
	 *        <strong>1</strong> 存在于正在非结束状态的订单<br/>
	 *        <strong>2</strong> 不存在任何订单
	 */
	public short getGiftCircsInSalesOrder(Integer giftId);
	
	
}
